package com.jf.blog.util.mybatis;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import lombok.extern.slf4j.Slf4j;

import java.nio.file.Paths;
import java.util.Collections;
import java.util.ResourceBundle;

@Slf4j
public class CodeGenerator {

    private static final ResourceBundle resourceBundle = ResourceBundle.getBundle("application-jdbc");

    public static void main(String[] args) {
        String url = resourceBundle.getString("jdbc.url");
        String username = resourceBundle.getString("jdbc.username");
        String password = resourceBundle.getString("jdbc.password");
        /*获取项目的绝对路径地址*/
        String basePath = Paths.get(System.getProperty("user.dir")).toString();
//        Map<OutputFile,String> map = new HashMap<>();
//        map.put(OutputFile.xml,basePath+"/src/main/resources/mapper");

        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> builder
                        .author("JF")/*设置作者*/
                        .outputDir(basePath + "/src/main/java")/*设置文件生成路径*/
                        .commentDate("yyyy-MM-dd")/*设置生成日期*/
                        .dateType(DateType.ONLY_DATE)/*配置数据库的日期转换为Java的Date*/
                        .disableOpenDir()/*生成后禁止打开文件夹*/
                        .enableSwagger()/*启用swagger*/
                )
                .packageConfig(builder -> builder
                                .parent("com.jf.blog")/*父级包路径*/
                                .entity("bean")/*实体类包名，如果包名为entity时，可以省略*/
                                .mapper("mapper")
                                .service("service")
                                .serviceImpl("service.impl")
                                .controller("controller")
                                /*设置mapper.xml文件的路径*/
                                .xml("mapper")
                                /*设置mapper.xml存放位置，默认会存入Java文件夹中*/
                                .pathInfo(Collections.singletonMap(OutputFile.xml, basePath + "/src/main/resources/mapper"))
//                        .pathInfo(map)
                )
                .strategyConfig(builder -> builder
                        .entityBuilder()/*设置实体类的策略*/
                        .enableLombok() // 启用 Lombok
                        .enableTableFieldAnnotation() // 启用字段注解
                        .enableFileOverride()/*重复生成时覆盖文件*/
                        .controllerBuilder()
                        .enableHyphenStyle() // 开启驼峰转连字符（blog_tag表生成的控制器的mapping地址，默认为blogTag,配置后会变成blog-tag）	默认值:false
                        .enableRestStyle() // 启用 REST 风格
                        .enableFileOverride()
                        .serviceBuilder()
                        /*格式化service文件的名字，默认的Service名称IBlogService*/
                        .formatServiceFileName("%sService")
                        .formatServiceImplFileName("%sServiceImpl")
                        .enableFileOverride()

                )
                .execute();
    }
}
